در اين مقاله ياد خواهيد گرفت که چگونه با استفاده از کد نويسي در دلفي Activex يا dll مورد نياز برنامه خود را در دستگاه کاربرانتان نصب کنيد.
براي رسيدن به اين هدف از دستور regsvr32.exe استفاده مي کنيم.
اين دستور يکي از دستورات ويندوز است که براي رجيستر کردن Activex يا dll ها بکار مي رود.
خط فرمان اين دستور به شکل زير مي باشد.
Regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
/s – در موقع نصب هيچ پيام يا پنجره اي نمايش نده
/u – حذف فايل
ما با استفاده از اين دستور ويندوز و کد دلفي زير مي توانيم به نتيجه مورد نظر خود برسيم.
procedure RegisterOCX;
type
TRegFunc = function : HResult; stdcall;
var
ARegFunc : TRegFunc;
aHandle : THandle;
ocxPath : string;
begin
try
ocxPath := ExtractFilePath(Application.ExeName) + 'Flash.ocx';
aHandle := LoadLibrary(PChar(ocxPath));
if aHandle <> 0 then
begin
ARegFunc := GetProcAddress(aHandle,'DllRegisterServer');
if Assigned(ARegFunc) then
begin
ExecAndWait('regsvr32','/s ' + ocxPath);
end;
FreeLibrary(aHandle);
end;
except
ShowMessage(Format('Unable to register %s', [ocxPath]));
end;
end;
در روال بالا مقدار ocxpath برابر با مسير فايل dll يا ocx ما مي باشد. ممکن است نصب يک dll ياocx طول بکشد و بعد از اجراي روال بالا دستور لازم براي نصب صورت گرفته و برنامه ادامه کار خود را پيگيري مي کند. اگر اين مدت زمان زياد باشد برنامه شما اجرا شده ولي هنوز dll يا ocx رجيستر نشده است. به همين منظور از تابع ExecAndWait استفاده مي کنيم. اين تابع بعد از اجراي يک دستور منتظر مي ماند تا کار به طور کامل انجام پذيرد. کد اين تابع به شرح ذيل مي باشد.
uses shellapi;
...
function ExecAndWait(const ExecuteFile, ParamString : string): boolean;
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
lpParameters := PChar(ParamString);
nShow := SW_HIDE;
end;
if ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
Result:=True;
end
else Result:=False;
end;
اميدوارم که از اين مقاله استفاده لازم را برده باشيد.
نظرات شما عزیزان: